module Network.HTTP.Client.Manager
  ( HasHttpManagerM (..),
    HTTP.Manager,
  )
where

import Control.Monad.Except
import Control.Monad.Reader
import Control.Monad.State.Strict
import Control.Monad.Writer.Strict
import Network.HTTP.Client as HTTP

class (Monad m) => HasHttpManagerM m where
  askHttpManager :: m HTTP.Manager

instance (HasHttpManagerM m) => HasHttpManagerM (ExceptT e m) where
  askHttpManager = lift askHttpManager

instance (HasHttpManagerM m) => HasHttpManagerM (ReaderT r m) where
  askHttpManager = lift askHttpManager

instance (HasHttpManagerM m) => HasHttpManagerM (StateT s m) where
  askHttpManager = lift askHttpManager

instance (Monoid w, HasHttpManagerM m) => HasHttpManagerM (WriterT w m) where
  askHttpManager = lift askHttpManager
